package composants
{

	import flash.display.DisplayObject;
	import flash.display.Loader;
	import flash.display.LoaderInfo;
	import flash.events.Event;
	import flash.net.URLLoader;
	import flash.net.URLLoaderDataFormat;
	import flash.net.URLRequest;
	import flash.sampler.NewObjectSample;

	import mx.containers.Accordion;
	import mx.containers.HBox;
	import mx.controls.Button;
	import mx.controls.Image;


	/**
	 Cette Class AccordionIcon qui herite de Accordion permet de creer
	 * dynamique un Accordion sans connaitre au prealable les elements
	 * qui vont y figures.Nous le faisons a partir de la lecture d'un
	 * fichier xml genere par le script php sur le serveur.
	 */

	public class AccordionIcon extends Accordion
	{
		/**
		 * Instance de classe Objet Image
		 */
		public var ima:Image;
		/**
		 * Contiendra le nom (texte) des boutons
		 */
		public var uri:String=new String();
		/**
		 * Longueur de l'accordéon
		 * @default 300
		 */
		private var long:int=300;
		/**
		 * Largeur de l'accordéon
		 * @default 300
		 */
		private var larg:int=350;
		/**
		 * Instance d'un objet URLLoader
		 */
		private var xmlLoader:URLLoader;
		/**
		 * Instance d'un objet Loader
		 */
		public var imaLoad:Loader;
		/**
		 * Instance d'un objet XML, contiendra des données xml
		 */
		private var xml:XML;
		/**
		 *
		 * Un bouton
		 */
		public var but:Button;
		/**
		 * Tableau qui contiendra tous boutons
		 * @default null
		 */
		public var conteneurButton:Array=new Array();

		/**
		 * Constructeur: chargement d'un fichier xml du serveur
		 */
		public function AccordionIcon()
		{
			super();
			this.height=long;
			this.width=larg;
			this.loadXML("http://127.0.0.1/ProjetTaweb/accordeon.xml?" + Math.floor(Math.random() * 100000));
		}

		/**
		 * Chargement d'un fichier à partir d'une adresse du serveur
		 * @param Uri chemin du fichier xml
		 */
		public function loadXML(Uri:String):void
		{
			xmlLoader=new URLLoader();
			xmlLoader.addEventListener(Event.COMPLETE, onComplete);
			xmlLoader.load(new URLRequest(Uri));
		}

		/**
		 * Fonction réalisée si le chargement s'est effectué correctement
		 * @param e évènement
		 */
		public function onComplete(e:Event):void
		{
			xml=new XML(e.target.data);
			this.createAccordion();

		}

		/**
		 * Chargement d'une image à partir d'une adresse
		 * @param Uri chemin où est stockée l'image
		 */
		public function loadImage(Uri:String):void
		{
			imaLoad=new Loader();
			//imaLoad.addEventListener(Event.COMPLETE,onFinishLoad);
			imaLoad.load(new URLRequest(Uri));
			but=new Button();
			but.height=75;
			but.width=75;
			but.addChild(imaLoad);
			if (imaLoad.width > 100 && imaLoad.height > 100)
			{
				imaLoad.scaleX=0.2;
				imaLoad.scaleY=0.2;
			}
			else
			{
				imaLoad.scaleX=0.7;
				imaLoad.scaleY=0.7;
			}
			//imaLoad.width = 70;
			//imaLoad.height = 70;
		}

		/**
		 * Fonction qui affecte une source à une image une fois chargée
		 * @param event évènement
		 */
		public function onFinishLoad(event:Event):void
		{

			ima.source=(event.target.data);
		}

		/**
		 * Fonction de création de l'accordéon
		 */
		public function createAccordion():void
		{

			var accordion=xml.elements();
			var element;
			var button;
			var moh;
			var i:int=0;
			for each (element in accordion)
			{
				if (element.name() != ".svn")
				{
					var hbox:HBox=new HBox();
					if (element.name() == "link_rooms")
						hbox.label = "etages";
					else
						hbox.label=element.name();
					button=element.children();
					this.addChild(hbox);
					for each (moh in button)
					{
						uri=moh.text();
						loadImage(uri);
						if (moh.name() == "salle")
						{
							var st:String=moh.text();
							st.lastIndexOf("salles");
							var results:Array=st.split(/salles*/);
							var str:String=results[1];

							but.label=str.substring(1, str.length - 4);
						}
						else if (moh.name() == "link_room")
						{
							var st:String=moh.text();
							st.lastIndexOf("link_rooms");
							var results:Array=st.split(/link_rooms*/);
							var str:String=results[1];
							
							but.label=str.substring(1, str.length - 4);
						}
						else
							but.label=moh.name() + " " + (++i).toString();
						
						but.id=moh.name();
						but.labelPlacement="bottom";
						if (i == 4)
							but.y+=60;
						if (but.label != "conf")
						{
							hbox.addChild(but);
							conteneurButton.push(but);
						}
					}
					i=0;
				}
			}
		}
		//Fin accordion	
	}
}